gdk: Manage GDK_TOUCH_CANCEL events on gdk_windowing_got_event()
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 9 Dec 2015 11:39:43 +0000 (12:39 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 14 Dec 2015 23:40:21 +0000 (00:40 +0100)
These events must get active/implicit grabs undone, and can be done
on client-side code.

https://bugzilla.gnome.org/show_bug.cgi?id=759309

gdk/gdkwindow.c

index bd32ad12c74682dc3dab89831c3844e9699403f1..6f9aae803fcb0c469e3814fff3165f9ffd45e635 100644 (file)
@@ -9579,7 +9579,8 @@ _gdk_windowing_got_event (GdkDisplay *display,
       goto out;
     }
 
-  if (!(is_button_type (event->type) ||
+  if (!(event->type == GDK_TOUCH_CANCEL ||
+        is_button_type (event->type) ||
         is_motion_type (event->type) ||
         is_gesture_type (event->type)) ||
       event_window->window_type == GDK_WINDOW_ROOT)
@@ -9684,13 +9685,14 @@ _gdk_windowing_got_event (GdkDisplay *display,
     unlink_event = proxy_gesture_event (event, serial);
 
   if ((event->type == GDK_BUTTON_RELEASE ||
+       event->type == GDK_TOUCH_CANCEL ||
        event->type == GDK_TOUCH_END) &&
       !event->any.send_event)
     {
       GdkEventSequence *sequence;
 
       sequence = gdk_event_get_event_sequence (event);
-      if (event->type == GDK_TOUCH_END && sequence)
+      if (sequence)
         {
           _gdk_display_end_touch_grab (display, device, sequence);
         }